//
//  ZHUserAccount.swift
//  ZHWeibo
//
//  Created by user on 15/12/7.
//  Copyright © 2015年 heima. All rights reserved.
//

 /// 模型只用于将其他数据类型转换为模型的方式或者方法,具体的转换以及获取数据的方法均有VM去做

import UIKit

class ZHUserAccount: NSObject, NSCoding{
    //定义属性,实现字典转模型
    var uid: String?
    var expiresDate: NSDate?
    /// 这种写法是计算属性中的只读属性的用法
    var expires_in: NSTimeInterval = 0 {
        didSet{
            /**
              * 加上一段时间
            */
            expiresDate = NSDate(timeIntervalSinceNow:expires_in)
        }
    }
    var access_token: String?//token
    var remind_in: String?//token的声明周期(该参数即将废弃)
    var avatar_large: String?//图片路径
    var screen_name: String?//用户的昵称
    
    
    //构造方法,实现字典转模型
    init(dict: [String: AnyObject]){
        super.init()
        setValuesForKeysWithDictionary(dict)
    }
    //重写KVC异常抛出的方法
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        //打印信息
    }
    //重写des方法-----  注意这不是方法,而是参数
    override var description: String {
        let keys = ["uid", "expires_in", "access_token", "avatar_large", "screen_name"]
        return dictionaryWithValuesForKeys(keys).description
    }
    //提供归档解档的方法
    /**
    *  解档----从文件中读取
    */
    required init?(coder aDecoder: NSCoder) {
        uid = aDecoder.decodeObjectForKey("uid") as? String
        expiresDate = aDecoder.decodeObjectForKey("expiresDate") as? NSDate
        access_token = aDecoder.decodeObjectForKey("access_token") as? String
        avatar_large = aDecoder.decodeObjectForKey("avatar_large") as? String
        screen_name = aDecoder.decodeObjectForKey("screen_name") as? String
    }
    /**
    *  归档,将模型转换为二进制进行存储
    */
    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(uid, forKey: "uid")
        aCoder.encodeObject(expiresDate, forKey: "expiresDate")
        aCoder.encodeObject(access_token, forKey: "access_token")
        aCoder.encodeObject(avatar_large, forKey: "avatar_large")
        aCoder.encodeObject(screen_name, forKey: "screen_name")
    }
}


// MARK: - 动态实现归档解档
extension ZHUserAccount{
    //指定构造函数不能声明在分类中
//    required init?(coder aDecoder: NSCoder) {
//        
//    }
}










